home *** CD-ROM | disk | FTP | other *** search
/ Belgian Amiga Club - ADF Collection / BS1 part 71.zip / BS1 part 71 / AmosPro2.0_d5.adf / Extensions / |request.s < prev    next >
Text File  |  1992-09-28  |  15KB  |  798 lines

  1. ;---------------------------------------------------------------------
  2. ;    **   **   **  ***   ***   ****     **    ***  **  ****
  3. ;   ****  *** *** ** ** **     ** **   ****  **    ** **  **
  4. ;  **  ** ** * ** ** **  ***   *****  **  **  ***  ** **
  5. ;  ****** **   ** ** **    **  **  ** ******    ** ** **
  6. ;  **  ** **   ** ** ** *  **  **  ** **  ** *  ** ** **  **
  7. ;  **  ** **   **  ***   ***   *****  **  **  ***  **  ****
  8. ;---------------------------------------------------------------------
  9. ; AMOS Requester handler V1.6
  10. ; By François Lionet
  11. ; AMOS - AMOS Pro - AMOS Compiler (c) Europress Software 1990-1992
  12. ; To be used with AMOS Pro 1.0 and over
  13. ;--------------------------------------------------------------------- 
  14. ; This file is public domain
  15. ;---------------------------------------------------------------------
  16. ; Please refer to the _Music.s file for more informations
  17. ;---------------------------------------------------------------------
  18.  
  19. Version        MACRO
  20.         dc.b    "1.0"
  21.         ENDM
  22.  
  23.  
  24.  
  25. Req_WY        equ    100
  26.  
  27. T_Tit        equ    0
  28. T_Text        equ    T_Tit+80
  29. T_Gad        equ    T_Text+320
  30. T_Size        equ    T_Gad+128
  31.  
  32. *
  33. ExtNb        equ    3-1
  34. *
  35.          Include    "|AMOS_Includes.s"
  36. *
  37. Start        dc.l    C_Tk-C_Off
  38.         dc.l    C_Lib-C_Tk
  39.         dc.l    C_Title-C_Lib
  40.         dc.l    C_End-C_Title
  41.         dc.w    -1    
  42. *
  43. ******************************************************************
  44. *         OFFSETS TO FUNCTIONS
  45. C_Off           dc.w (L1-L0)/2,(L2-L1)/2,(L3-L2)/2,(L4-L3)/2
  46.             dc.w (L5-L4)/2,(L6-L5)/2,(L7-L6)/2,(L8-L7)/2
  47.             dc.w (L9-L8)/2,(L10-L9)/2,(L11-L10)/2
  48.  
  49. ******************************************************************
  50. *     TOKEN TABLE + Addresses
  51. C_Tk        dc.w     1,0
  52.         dc.b     $80,-1
  53.         dc.w    L_ReqOn,-1
  54.         dc.b    "request o","n"+$80,"I",-1
  55.         dc.w    L_ReqOf,-1
  56.         dc.b    "request of","f"+$80,"I",-1
  57.         dc.w    L_ReqWb,-1
  58.         dc.b    "request w","b"+$80,"I",-1
  59.         dc.w     0
  60.  
  61. ******************************************************************
  62. C_Lib
  63. ******************************************************************
  64. *        COLD START
  65. L0    movem.l    a3-a6,-(sp)
  66.     lea    ReqData(pc),a4
  67.     move.l    a4,ExtAdr+ExtNb*16(a5)
  68.     lea    Quit(pc),a0
  69.     move.l    a0,ExtAdr+ExtNb*16+8(a5)
  70. * Copy default palette    
  71.     lea    PI_DefEPa+8*2(a5),a0    
  72.     lea    Req_Pal+8*2(pc),a1
  73.     moveq    #24-1,d0
  74. CPal    move.w    (a0)+,(a1)+
  75.     dbra    d0,CPal
  76. * Branch the requester
  77.     move.l    a5,Datas-ReqData(a4)
  78.     lea    AutoReq(pc),a2
  79.     lea    EasyReq(pc),a3
  80.     Rbsr    L_SetJump
  81.     move.l    a2,PrevAuto-ReqData(a4)
  82.     move.l    a3,PrevEasy-ReqData(a4)
  83.     move.w    #-1,ReqFlag-ReqData(a4)            * Default is AMOS request
  84. * Return to caller
  85.     movem.l    (sp)+,a3-a6
  86.     moveq    #ExtNb,d0            * NO ERRORS
  87.     rts
  88.  
  89. ******* SCREEN RESET
  90. Warm    rts
  91.  
  92. ******* QUIT
  93. Quit    move.l    PrevAuto(pc),a2
  94.     move.l    PrevEasy(pc),a3
  95.     Rbra    L_SetJump
  96.  
  97. ***********************************************************
  98. *    AMOS REQUESTER
  99.  
  100. AutoReq    movem.l    a0-a6/d0-d7,-(sp)
  101.     bsr    Req_In
  102.     bpl.s    .Skip
  103.     bsr    Req_Auto
  104.     bra    Req_AMOS
  105. .Skip    move.l    PrevAuto-ReqData(a6),ScAdr-ReqData(a6)
  106.     bra.s    Req_WB
  107.  
  108. EasyReq    movem.l    a0-a6/d0-d7,-(sp)
  109.     bsr    Req_In
  110.     bpl.s    .Skip
  111.     bsr    Req_Easy
  112.     bra.s    Req_AMOS
  113. .Skip    move.l    PrevEasy-ReqData(a6),ScAdr-ReqData(a6)
  114.     bra.s    Req_WB
  115.  
  116. ******* Dispatch requester between AMOS/WB
  117. Req_In    lea    ReqData(pc),a6
  118.     move.l    Datas-ReqData(a6),a5
  119.     tst    ReqFlag-ReqData(a6)
  120.     beq.s    Req_ANo
  121.     bmi.s    .AMOS
  122. * System requester?
  123.     tst.b    WB_Closed(a5)        WB closed!
  124.     bne.s    .AMOS
  125. .WB    moveq    #1,d0
  126.     rts
  127. * AMOS requester
  128. .AMOS    tst.w    T_AMOSHere(a5)        AMOS here?
  129.     beq.s    .WB
  130.     moveq    #-1,d0
  131.     rts
  132.  
  133. ******* Always no!
  134. Req_ANo    addq.l    #4,sp
  135.     movem.l    (sp)+,a0-a6/d0-d7
  136.     moveq    #0,d0
  137.     rts
  138.  
  139. ******* WB requester
  140. Req_WB    move.w    T_AMOSHere(a5),d0    Is AMOS here?
  141.     move.w    d0,ReqOld-ReqData(a6)
  142.     beq.s    .skip1
  143.     EcCalD    AMOS_WB,0        AMOS To BACK
  144. .skip1    movem.l    (sp),a0-a6/d0-d7
  145.     move.l    ScAdr(pc),a5
  146.     jsr    (a5)
  147.     lea    ReqData(pc),a6
  148.     move.l    Datas-ReqData(a6),a5
  149.     move.l    d0,Req_Pos-ReqData(a6)
  150.     move.w    ReqOld-ReqData(a6),d1
  151.     beq.s    .skip2
  152.     EcCalD    AMOS_WB,1        AMOS To FRONT
  153. .skip2    movem.l    (sp)+,a0-a6/d0-d7
  154.     move.l    Req_Pos(pc),d0
  155.     rts
  156.  
  157. ******* AMOS Normal requester
  158. Req_AMOS
  159.  
  160.     SyCall    AMALFrz
  161.     bsr    UnMix1
  162.  
  163.     move.w    Req_Sx-ReqData(a6),d2
  164.     lsl.w    #3,d2
  165.     ext.l    d2
  166.     move.w    Req_Sy-ReqData(a6),d3
  167.     lsl.w    #3,d3
  168.     ext.l    d3
  169.     moveq    #3,d4
  170.     move.l    #$8000,d5
  171.     moveq    #8,d6
  172.     moveq    #0,d7
  173.     lea    Req_Pal-ReqData(a6),a1
  174.     EcCalD    Cree,EcReq
  175.     bne    NoReq
  176.     move.l    a0,ScAdr-ReqData(a6)
  177.     WiCalA    Print,Req_Init-ReqData(a6)
  178.  
  179. * Top
  180.     moveq    #0,d0
  181.     moveq    #0,d1
  182.     moveq    #0,d2
  183.     moveq    #0,d3
  184.     moveq    #4,d4
  185.     moveq    #3*8,d5
  186.     bsr    Copy
  187.     moveq    #4,d0
  188.     moveq    #1,d4
  189.     move.w    Req_Sx-ReqData(a6),d6
  190. .lp1    bsr    Copy
  191.     subq.w    #1,d6
  192.     cmp.w    #9,d6
  193.     bcc.s    .lp1
  194.     moveq    #10,d0
  195.     moveq    #4,d4
  196.     bsr    Copy
  197. * Middle
  198.     moveq    #3*8,d3
  199.     move.w    Req_Sy-ReqData(a6),d7
  200.     sub.w    #6,d7
  201. .lp2    moveq    #0,d0
  202.     moveq    #3*8,d1
  203.     moveq    #0,d2
  204.     moveq    #2,d4
  205.     moveq    #12,d5
  206.     bsr    Copy
  207.     moveq    #6,d0
  208.     moveq    #1,d4
  209.     move.w    Req_Sx-ReqData(a6),d6
  210. .lp3    bsr    Copy
  211.     subq.w    #1,d6
  212.     cmp.w    #5,d6
  213.     bcc.s    .lp3
  214.     moveq    #12,d0
  215.     moveq    #2,d4
  216.     bsr    Copy
  217.     addq.w    #8,d3
  218.     subq.w    #1,d7
  219.     bne.s    .lp2
  220. * Bottom
  221.     moveq    #0,d0
  222.     moveq    #4*8+4,d1
  223.     moveq    #0,d2
  224.     add.w    #4,d3
  225.     moveq    #1,d4
  226.     moveq    #2*8+4,d5
  227.     bsr    Copy
  228.     moveq    #6,d0
  229.     moveq    #1,d4
  230.     move.w    Req_Sx-ReqData(a6),d6
  231. .lp4    bsr    Copy
  232.     subq.w    #1,d6
  233.     cmp.w    #3,d6
  234.     bcc.s    .lp4
  235.     moveq    #13,d0
  236.     moveq    #1,d4
  237.     bsr    Copy
  238. * Bottom Left
  239.     move.l    Req_Pos-ReqData(a6),a0
  240. .lp5    tst.b    (a0)+
  241.     bne.s    .lp5
  242.     sub.l    Req_Pos-ReqData(a6),a0
  243.     move.w    a0,d6
  244.     moveq    #1,d0
  245.     moveq    #4*8+4,d1
  246.     moveq    #1,d2
  247.     moveq    #2,d4
  248.     moveq    #2*8,d5
  249.     bsr    Copy
  250.     moveq    #3,d0
  251.     moveq    #1,d4
  252.     subq.w    #3+1,d6
  253.     bmi.s    .sk2
  254. .lp6    bsr    Copy
  255.     dbra    d6,.lp6
  256. .sk2    moveq    #4,d0
  257.     moveq    #2,d4
  258.     bsr    Copy
  259. * Bottom right
  260.     move.l    Req_Neg-ReqData(a6),d0
  261.     move.l    d0,a0
  262.     beq.s    .sk1
  263. .lp7    tst.b    (a0)+
  264.     bne.s    .lp7
  265.     sub.l    Req_Neg-ReqData(a6),a0
  266.     move.w    a0,d6
  267.     move.w    Req_Sx-ReqData(a6),d0
  268.     sub.w    a0,d0
  269.     add.b    #48-1,d0
  270.     move.b    d0,XTNeg-ReqData(a6)
  271.     moveq    #8,d0
  272.     moveq    #4*8+4,d1
  273.     move.w    Req_Sx-ReqData(a6),d2
  274.     sub.w    d6,d2
  275.     subq.w    #2,d2
  276.     moveq    #2,d4
  277.     moveq    #2*8,d5
  278.     bsr    Copy
  279.     moveq    #10,d0
  280.     moveq    #1,d4
  281.     subq.w    #3+1,d6
  282.     bmi.s    .sk3
  283. .lp8    bsr    Copy
  284.     dbra    d6,.lp8
  285. .sk3    moveq    #11,d0
  286.     moveq    #2,d4
  287.     bsr    Copy
  288. .sk1
  289. * End of init
  290.     SyCalD    ResZone,2
  291.     move.w    Req_Sy-ReqData(a6),d0
  292.     lsl.w    #3,d0
  293.     move.w    d0,Req_Sy-ReqData(a6)
  294.  
  295. * Initialise background text
  296.     WiCalA    Centre,T_Tit(a4)
  297. * Print main text
  298.     WiCalA    Print,Req_Main(pc)
  299.     lea    T_Text(a4),a1
  300. .lop    move.l    a1,-(sp)
  301.     WiCall    Centre
  302.     move.l    (sp)+,a1
  303. .lop1    tst.b    (a1)+
  304.     bne.s    .lop1
  305.     tst.b    (a1)
  306.     bne.s    .lop
  307. * Positive text (left)
  308.     moveq    #1,d0
  309.     moveq    #"0",d1
  310.     bsr    PrtZone
  311. * Negative text (right)
  312.     move.l    Req_Neg-ReqData(a6),d0
  313.     beq.s    .NoNeg
  314.     move.l    d0,a0
  315.     moveq    #2,d0
  316.     moveq    #"0",d1
  317.     bsr    PrtZone
  318. * Screen appearance
  319. .NoNeg    move.l    ScAdr-ReqData(a6),a2
  320.     move.w    #288,d0
  321.     move.w    Req_Sx-ReqData(a6),d1
  322.     lsl.w    #1,d1
  323.     sub.w    d1,d0
  324.     move.w    d0,EcAWX(a2)
  325.     bset    #1,EcAW(a2)
  326.     moveq    #8,d7
  327.     moveq    #1,d6
  328.     move.w    Req_Sy-ReqData(a6),d5
  329.     lsr.w    #1,d5
  330.     add.w    #Req_Wy,d5
  331.     bsr    AppCentre
  332. * State of disc drive
  333.     SyCall    GetDisc
  334.     move.w    d0,DOld-ReqData(a6)
  335.  
  336. ******* Test loop (fun!)
  337. ReqLoop    
  338.     bsr    UnMix2
  339.     move.l    a6,-(sp)
  340.     move.l    T_GfxBase(a5),a6
  341.     jsr    -270(a6)        WaitTOF
  342.     move.l    (sp)+,a6
  343.     bsr    UnMix1
  344.  
  345. * Automatic disc change
  346.     move.l    Req_IDCMP-ReqData(a6),d0
  347.     btst    #15,d0
  348.     beq.s    NoAuto
  349.     SyCall    GetDisc
  350.     cmp.w    DOld-ReqData(a6),d0
  351.     beq.s    NoAuto
  352.     move.w    d0,DOld-ReqData(a6)
  353.     bne    ReqYes
  354. * Keyboard
  355. NoAuto    SyCall    Inkey
  356.     cmp.w    #13,d1        * ASCII-> Return 
  357.     beq.s    ReqYes    
  358.     cmp.w    #27,d1        * ASCII-> ESC
  359.     beq.s    ReqNo    
  360. * Don't you think it is better than this wierd Amiga V and B?
  361. * Sometime I ask myself what they were thinking when they chose such
  362. * key combinations!
  363.     swap    d1
  364.     move.w    d1,d0        * Isolate AMIGA keys
  365.     and.w    #%1100000000000000,d0
  366.     beq.s    RqL0
  367.     cmp.b    #$34,d1        * V
  368.     beq.s    ReqYes
  369.     cmp.b    #$35,d1        * B
  370.     beq.s    ReqNo
  371. * Mouse pointer
  372. RqL0    SyCall    GetZone
  373.     cmp.w    #EcReq,d1
  374.     beq.s    RqL1
  375.     moveq    #0,d1
  376. RqL1:    swap     d1
  377.     cmp.w    d7,d1
  378.     beq.s    RqL2
  379.     move.w    d7,d0
  380.     move.w    d1,d7
  381.     moveq    #"0",d1
  382.     bsr    PrtZone
  383. RqL2:    move.w    d7,d0
  384.     moveq    #"1",d1
  385.     bsr    PrtZone
  386.     tst.w    d7
  387.     beq    ReqLoop
  388.     SyCall    MouseKey
  389.     tst.w    d1
  390.     beq    ReqLoop
  391.     cmp.w    #2,d7
  392.     beq.s    ReqNo
  393. ReqYes    moveq    #-1,d0
  394.     bra.s    ReqGo
  395. ReqNo    moveq    #0,d0
  396.  
  397. ******* End of screen (well done!!!)
  398. ReqGo    move.l    d0,-(sp)
  399.     move.l    ScAdr-ReqData(a6),a2
  400.     moveq    #-8,d7
  401.     move.w    EcTY(a2),d6
  402.     lsr.w    #1,d6
  403.     move.w    Req_Sy-ReqData(a6),d5
  404.     lsr.w    #1,d5
  405.     add.w    #Req_Wy,d5
  406.     bsr    AppCentre
  407.     EcCalD    Del,EcReq
  408.  
  409. ******* Back to system!
  410. ReqX    bsr    UnMix2
  411.     bsr    ClrData
  412.     SyCall    AMALUFrz    
  413.     move.l    (sp)+,Req_Pos-ReqData(a6)    * Returns answer
  414. * Normal exit
  415. ReqXX    movem.l    (sp)+,a0-a6/d0-d7
  416.     move.l    Req_Pos(pc),d0
  417.     rts
  418. ******* Can't open screen!!!
  419. NoReq    clr.l    -(sp)
  420.     bra.s    ReqX
  421.  
  422. ******* Print a zone D0-> zone, D1-> inverse or not
  423. PrtZone    subq.w    #1,d0
  424.     bmi.s    PrtX
  425.     bne.s    PrtNeg
  426. * Print pos text
  427. PrtPos    tst.l    Req_Pos-ReqData(a6)
  428.     beq.s    .skip
  429.     lea    TPos1-ReqData(a6),a1
  430.     move.b    d1,8(a1)
  431.     WiCall    Print
  432.     move.l    Req_Pos-ReqData(a6),a1
  433.     WiCall    Print
  434.     WiCalA    Print,TPos2-ReqData(a6)
  435. .skip    bra.s    PrtX
  436. * Print neg text
  437. PrtNeg    tst.l    Req_Neg-ReqData(a6)
  438.     beq.s    .skip
  439.     lea    TNeg1-ReqData(a6),a1
  440.     move.b    d1,8(a1)
  441.     WiCall    Print
  442.     move.l    Req_Neg-ReqData(a6),a1
  443.     WiCall    Print
  444.     WiCalA    Print,TNeg2-ReqData(a6)
  445. .skip
  446. PrtX    rts
  447.  
  448. ******* Screen appearance
  449. AppCentre:
  450.     move.w    d6,d4
  451.     move.w    d6,EcAWTy(a2)
  452.     add.w    d6,EcAWTy(a2)
  453.     bset    #2,EcAWT(a2)
  454.     move.w    EcTy(a2),d0
  455.     lsr.w    #1,d0
  456.     sub.w    d6,d0
  457.     move.w    d0,EcAVY(a2)
  458.     bset    #2,EcAV(a2)
  459.     move.w    d5,EcAWy(a2)
  460.     sub.w    d6,EcAWy(a2)
  461.     bset    #2,EcAW(a2)
  462.     movem.l    a2/d4-d7,-(sp)
  463.     SyCall    WaitVBL
  464.     EcCall    CopForce
  465.     movem.l    (sp)+,a2/d4-d7
  466.     add.w    d7,d6
  467.     bpl.s    FsApp2
  468.     clr.w    d6
  469. FsApp2:    move.w    EcTy(a2),d0
  470.     lsr.w    #1,d0
  471.     cmp.w    d0,d6
  472.     bcs.s    FsApp3
  473.     move.w    d0,d6
  474. FsApp3:    cmp.w    d4,d6
  475.     bne.s    AppCentre
  476.     rts
  477.  
  478. ******* Prevent mixes between AMOS and the requester!
  479. UnMix1    movem.l    d0-d7/a0-a6,-(sp)
  480.     move.l    $4.w,a6
  481.     jsr    Forbid(a6)
  482.     EcCall    Current
  483.     move.w    EcNumber(a0),d1
  484.     lea    ReqOld(pc),a0
  485.     move.w    d1,(a0)
  486.     EcCalD    Active,EcReq
  487.     EcCalD    First,EcReq
  488.     EcCall    CopMake
  489.     SyCall    WaitVBL
  490.     movem.l    (sp)+,d0-d7/a0-a6
  491.     rts
  492. UnMix2    movem.l    d0-d7/a0-a6,-(sp)
  493.     move.w    ReqOld(pc),d1
  494.     EcCall    Active
  495.     move.l    $4.w,a6
  496.     jsr    Permit(a6)
  497.     movem.l    (sp)+,d0-d7/a0-a6
  498.     rts
  499.  
  500. ******* Open TEXT data zone
  501. ResData    move.l    #T_Size,d0
  502.     SyCall    SyFast
  503.     move.l    d0,a4
  504.     rts
  505. ******* Clear TEXT data zone
  506. ClrData    move.l    #T_Size,d0
  507.     move.l    a4,a1
  508.     SyCall    SyFree
  509.     rts
  510.  
  511. ******* Entree requester WB1.3
  512. Req_Auto
  513.  
  514.     bsr    ResData
  515.  
  516.     move.l    #$00008000,Req_IDCMP-ReqData(a6)
  517.  
  518.     lsr.w    #3,d2
  519.     addq.w    #3,d2
  520.     and.w    #$FFFC,d2
  521.     move.w    d2,Req_Sx-ReqData(a6)
  522.     lsr.w    #3,d3
  523.     addq.w    #2,d3
  524.     move.w    d3,Req_Sy-ReqData(a6)
  525.  
  526.     move.l    a1,a0
  527.     lea    T_Text(a4),a1
  528.     moveq    #10,d0
  529.     bsr    IT_Print
  530.  
  531.     clr.l    Req_Pos-ReqData(a6)
  532.     lea    T_Gad(a4),a1
  533.     move.l    a2,d0
  534.     move.l    d0,a0
  535.     beq.s    .skip1
  536.     move.l    a1,Req_Pos-ReqData(a6)
  537.     moveq    #0,d0
  538.     bsr    IT_Print
  539. .skip1
  540.     clr.l    Req_Neg-ReqData(a6)
  541.     lea    T_Gad+64(a4),a1
  542.     move.l    a3,d0
  543.     move.l    d0,a0
  544.     beq.s    .skip2
  545.     move.l    a1,Req_Neg-ReqData(a6)
  546.     moveq    #0,d0
  547.     bsr    IT_Print
  548. .skip2
  549.     lea    Req_Tit(pc),a0
  550.     lea    T_Tit(a4),a1
  551. .loop    move.b    (a0)+,(a1)+
  552.     bne.s    .loop
  553.     rts    
  554.  
  555. ******* Entree requester WB2.0: fabrique les chaines de caracteres
  556. Req_Easy
  557.     bsr    ResData
  558.     move.l    (a2),Req_IDCMP-ReqData(a6)
  559.  
  560.     lea    8(a1),a2
  561.     clr.w    TxtMaxCx-ReqData(a6)
  562.  
  563.     lea    T_Tit(a4),a1
  564.     move.l    (a2)+,d0
  565.     move.l    d0,a0
  566.     bne.s    .nof
  567.     lea    Req_Tit(pc),a0
  568. .nof    bsr    Format
  569.  
  570.     move.l    (a2)+,a0
  571.     lea    T_Text(a4),a1
  572.     bsr    Format
  573.     move.w    TxtCy-ReqData(a6),Req_Sy-ReqData(a6)
  574.  
  575.     move.l    (a2)+,a0
  576.     lea    T_Gad(a4),a1
  577.     bsr    Format
  578.  
  579.     lea    T_Gad(a4),a0
  580.     move.l    a0,Req_Pos-ReqData(a6)
  581.     clr.l    Req_Neg-ReqData(a6)
  582. .loop    move.b    (a0)+,d0
  583.     beq.s    .skp
  584.     cmp.b    #"|",d0
  585.     bne.s    .loop
  586.     clr.b    -1(a0)
  587.     move.l    a0,Req_Neg-ReqData(a6)
  588. .skp
  589.     move.w    TxtMaxCx-ReqData(a6),d0
  590.     cmp.w    #32,d0
  591.     bcc.s    .skp2
  592.     moveq    #32,d0
  593. .skp2    add.w    #9,d0
  594.     and.w    #$FFFC,d0
  595.     move.w    d0,Req_Sx-ReqData(a6)
  596.  
  597.     add.w    #8,Req_Sy-ReqData(a6)
  598.     rts
  599.  
  600. ** Routine, appel de RawDoFmt
  601. Format    clr.w    TxtCx-ReqData(a6)
  602.     move.w    #1,TxtCy-ReqData(a6)
  603.     movem.l    a2/a3/a6,-(sp)
  604.     exg    a3,a1
  605.     lea    .OutC(pc),a2
  606.     move.l    $4.w,a6
  607.     jsr    -522(a6)
  608.     exg    a3,a1
  609.     movem.l    (sp)+,a2/a3/a6
  610. .XMax    move.w    TxtCx-ReqData(a6),d0
  611.     cmp.w    TxtMaxCx-ReqData(a6),d0
  612.     bls.s    .sk
  613.     move.w    d0,TxtMaxCx-ReqData(a6)
  614. .sk    rts
  615. .OutC    movem.l    a6/d0,-(sp)
  616.     lea    ReqData(pc),a6
  617.     addq.w    #1,TxtCx-ReqData(a6)
  618.     move.b    d0,(a3)+
  619.     cmp.b    #10,d0
  620.     bne.s    .Skip
  621.     clr.b    (a3)+
  622.     addq.w    #1,TxtCy-ReqData(a6)
  623.     bsr.s    .XMax
  624.     clr.w    TxtCx-ReqData(a6)
  625. .Skip    movem.l    (sp)+,a6/d0
  626.     clr.b    (a3)
  627.     rts
  628.  
  629. ******* Routine: copie un intuitext dans le buffer
  630. *    A0-> ITEXT
  631. *    A1-> Buffer
  632. *    D0-> Mettre un 10 a la fin...
  633. IT_Print
  634.     movem.l    a0-a2/d0-d1,-(sp)
  635. .loop    move.l    12(a0),d1
  636.     move.l    d1,a2
  637.     beq.s    .skip
  638. .loop1    move.b    (a2)+,(a1)+
  639.     bne.s    .loop1
  640.     tst.w    d0
  641.     beq.s    .skip
  642.     move.b    d0,-1(a1)
  643.     clr.b    (a1)+
  644. .skip    move.l    16(a0),d1
  645.     move.l    d1,a0
  646.     bne.s    .loop
  647.     movem.l    (sp)+,a0-a2/d0-d1
  648.     rts
  649.  
  650. ******* Routine: copie les donnees binaires
  651. Copy    movem.l    d0-d7/a0-a5,-(sp)
  652.     mulu    #RPic_Sx/8,d1            d1= offset source
  653.     add.l    d1,d0
  654.     lea    RPic-ReqData(a6),a0        a0= adress source
  655.     move.w    Req_Sx-ReqData(a6),d1
  656.     ext.l    d1                d1= size of dest line
  657.     mulu    d1,d3
  658.     add.l    d2,d3                d3= offset dest
  659.     move.l    ScAdr-ReqData(a6),a3        a3= dest screen
  660.     subq.w    #1,d4
  661.     subq.w    #1,d5
  662.     move.w    #RPic_NP-1,d2
  663. .loop1    move.l    (a3)+,a4
  664.     add.l    d3,a4
  665.     move.l    a0,a1
  666.     add.l    d0,a1
  667.     move.w    d5,d7
  668. .loop2    move.w    d4,d6
  669.     move.l    a1,a2
  670.     move.l    a4,a5
  671. .loop3    move.b    (a2)+,(a5)+
  672.     dbra    d6,.loop3
  673.     add.w    #RPic_Sx/8,a1        
  674.     add.l    d1,a4
  675.     dbra    d7,.loop2
  676.     add.w    #(RPic_Sx/8)*RPic_Sy,a0
  677.     dbra    d2,.loop1
  678.     movem.l    (sp)+,d0-d7/a0-a5
  679.     add.w    d4,d2
  680.     rts
  681.  
  682. ;--------------------------------------------------------------------
  683. *        DATA ZONE
  684. ReqData        
  685. *
  686. ScAdr        dc.l     0
  687. Datas        dc.l     0
  688. PrevAuto    dc.l    0
  689. PrevEasy    dc.l    0
  690.  
  691. Req_Sx        dc.w     0
  692. Req_Sy        dc.w    0
  693. Req_Pos        dc.l    0
  694. Req_Neg        dc.l    0
  695.  
  696. Req_IDCMP    dc.l    0
  697. ReqFlag        dc.w     0
  698. ReqOld        dc.w     0
  699. DOld        dc.w    0
  700. TxtCx        dc.w    0
  701. TxtMaxCx    dc.w    0
  702. TxtCy        dc.w    0
  703.  
  704. *         Title
  705. Req_Tit        dc.b "System request",0
  706. Req_Init    dc.b 27,"C0",27,"V0",27,"Y1",27,"B2",27,"P7",0
  707. *        Main text
  708. Req_Main    dc.b 27,"B2",27,"P3",27,"Y4",0
  709. *         Positive text
  710. TPos1        dc.b 27,"B4",27,"P3",27,"I0",24,30,30,27,"X2",27,"Z0",0
  711. TPos2        dc.b 27,"Z1",0
  712. *         Negative text
  713. TNeg1        dc.b 27,"B4",27,"P3",27,"I0",24,30,30,27,"X"
  714. XTNeg        dc.b "0",27,"Z0",0
  715. TNeg2        dc.b 27,"Z2",0
  716.         even
  717. RPic_Sx        equ    112
  718. RPic_Sy        equ    56
  719. RPic_Np        equ    3
  720.  
  721. Req_Pal        Incbin    "ReqPic.Bin"
  722. RPic        equ    Req_Pal+32*2
  723.  
  724.         even
  725.  
  726. ;--------------------------------------------------------------------
  727.  
  728. L1
  729. L2
  730. L3
  731.  
  732. ***********************************************************
  733. *        REQUEST WB
  734. L_ReqWb        equ    4
  735. L4    moveq    #1,d0
  736.     Rbra    L_ROnOf
  737. *********************************************************** 
  738. *        REQUEST ON
  739. L_ReqOn        equ    5
  740. L5    moveq    #-1,d0
  741.     Rbra    L_ROnOf
  742. *********************************************************** 
  743. *        REQUEST OFF
  744. L_ReqOf        equ    6
  745. L6    moveq    #0,d0
  746.     Rbra    L_ROnOf
  747. *
  748. L_ROnOf        equ    7
  749. L7    move.l    ExtAdr+ExtNb*16(a5),a0
  750.     move.w    d0,ReqFlag-ReqData(a0)
  751.     rts
  752.  
  753. ********************************************************** 
  754. *    Change the library jumps
  755. *    a2->    AutoRequest entry
  756. *    a3->    EasyRequest entry
  757. L_SetJump    equ    8
  758. L8    movem.l    a0/a1/a6,-(sp)
  759.     move.l    $4.w,a6
  760. * AutoRequest
  761.     move.l    a2,d0
  762.     lea    -$15c,a0
  763.     move.l    T_IntBase(a5),a1
  764.     jsr    SetFunction(a6)
  765.     move.l    d0,a2
  766. * EasyRequest
  767.     tst.w    WB2.0(a5)
  768.     beq.s    .skip
  769.     move.l    a3,d0
  770.     lea    -$1d4-(20*6),a0
  771.     move.l    T_IntBase(a5),a1
  772.     jsr    SetFunction(a6)
  773.     move.l    d0,a3
  774. .skip    movem.l    (sp)+,a0/a1/a6
  775.     rts
  776.  
  777. **********************************************************
  778. *    Even if you do not have error messages, you MUST
  779. *    leave TWO routines empty at the end...
  780. L9
  781. L10
  782. * Two routines means three borders!
  783. L11
  784.  
  785. *******************************************************************************
  786.  
  787. *         Welcome message
  788. C_Title        dc.b     "AMOSPro Requester V"
  789.         Version
  790.         dc.b    0,"$VER: "
  791.         Version
  792.         dc.b    0
  793.         Even
  794. *        End of extension
  795. C_End        dc.w    0
  796.  
  797.     even
  798.